class Animal():
    # 类属性
    name = "牧羊犬"

    # 对象属性
    def __init__(self, weight, height):
        self.weight = weight
        self.height = height

    # 对象(实例)的方法
    def eat(self):
        print("我是吃饭的方法")

    # 类方法
    @classmethod
    def sleep(cls):
        print("类方法")
        print(cls.name)
        print(cls == Animal)

    '''
    类方法:
        1.通过@classmethod装饰器进行修饰的方法就是类方法
        2.类方法可以通过类或者对象调用,但是一般使用类名调用
        3.类方法中没有self参数,不能调用对象的属性和方法(包含私有属性和私有方法)
        4.可以调用类属性和其他的类的方法, 通过cls关键字调用
        5.形参的名字是cls,他是class的简写.可以更换,只不过约定俗成,大家一般都使用它
        6.cls表示的是当前类
    '''

    # 静态方法
    @staticmethod
    def run():
        print("我是静态方法")

    '''
    静态方法:
        1.通过@staticmethod修饰的方法就是静态方法
        2.静态方法可以通过类或者对象调用,但是一般使用类名调用
        3.静态方法形式参数中没有参数cls. 在静态方法中一般不建议使用(类属性\类方法\其他的静态方法)
        4.静态方法一般是一个单独的方法,只是写在类中

    '''


ani = Animal(100, 50)
ani.eat()

Animal.sleep()
Animal.run()
